package com.atguigu.crowd.constant;

import java.util.HashSet;
import java.util.Set;

/**
 * 放行检查资源常量类，以及静态资源工具方法
 *
 * @author cyb315
 * @create 2021-11-10 17:22
 */
public class AccessPassResources {

    // 存放放行请求路径的集合
    public static final Set<String> PASS_RES_SET = new HashSet<>();

    static {
        // 进入首页
        PASS_RES_SET.add("/");
        // 进入注册页面
        PASS_RES_SET.add("/auth/member/to/reg/page.html");
        // 进入登录页面
        PASS_RES_SET.add("/auth/member/to/login/page.html");
        // 退出登录
        PASS_RES_SET.add("/auth/member/logout");
        // 执行登录
        PASS_RES_SET.add("/auth/member/do/login");
        // 执行注册
        PASS_RES_SET.add("/auth/do/member/register");
        // 发送短信验证码
        PASS_RES_SET.add("/auth/member/send/short/message.json");
    }

    // 存放放行对静态资源访问的集合
    public static final Set<String> STATIC_RES_SET = new HashSet<>();

    static {
        STATIC_RES_SET.add("bootstrap");
        STATIC_RES_SET.add("css");
        STATIC_RES_SET.add("fonts");
        STATIC_RES_SET.add("img");
        STATIC_RES_SET.add("jquery");
        STATIC_RES_SET.add("layer");
        STATIC_RES_SET.add("script");
        STATIC_RES_SET.add("ztree");
    }

    /**
     * 用于判断某个ServletPath值是否是对应一个静态资源
     *
     * @param servletPath
     * @return true代表是静态资源，false代表不是
     */
    public static boolean judgeCurrentServletPathIsStaticResource(String servletPath) {
        // 1.排除字符串无效的情况
        if (servletPath == null || servletPath.length() == 0) {
            throw new RuntimeException(CrowdConstant.MESSAGE_STRING_INVALIDATE);
        }
        // 2.根据/来拆分字符串，得到子串数组
        String[] split = servletPath.split("/");
        // 3.获取第一级路径
        String firstLevelPath = split[1];
        // 4.判断是否在放行静态资源集合里
        return STATIC_RES_SET.contains(firstLevelPath);
    }


}
